﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SW2A311_Lib;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Media.Imaging;
using System.Windows.Controls;

namespace Client
{
    /// <summary>
    /// Klassen som håndterer vores GanttChart, og bestemmer størrelsen på de enkelte elementer.
    /// </summary>
    public static class GanttChart
    {
        #region Instansvariabler
        /// <summary>
        /// Padding der er vertikalt mellem elementer.
        /// </summary>
        public static int ElementVerticalPadding
        {
            get
            {
                return _elementVerticalPadding;
            }
        }
        private static int _elementVerticalPadding = 1;
        /// <summary>
        /// Padding der er horizontalt mellem elementer.
        /// </summary>
        public static int ElementHorizontalPadding
        {
            get
            {
                return _elementHorizontalPadding;
            }
        }
        private static int _elementHorizontalPadding = 1;
        /// <summary>
        /// Farven som er indeni elementerne.
        /// </summary>
        public static Color GanttFillColor
        {
            get { return _ganttFillColor; }
            set { _ganttFillColor = value; }
        }
        private static Color _ganttFillColor = Colors.White;
        /// <summary>
        /// Bredden på et element.
        /// </summary>
        /// <remarks>
        /// Sættes til antallet af relative pixels på "1 dag".
        /// </remarks>
        public static double OneDayInPxWidth { get; set; }
        /// <summary>
        /// Højden på et element
        /// </summary>
        public static double OneElementInPxHeight { get; set; }
        /// <summary>
        /// Antallet af opgaver i Ganttcharten.
        /// </summary>
        public static int TotalTasks { get; set; }
        #endregion

        #region Metoder
        /// <summary>
        /// Finder X-koordinatet for et element efter start- og slut-tidspunkt.
        /// </summary>
        /// <param name="startTime">Starttidspunktet</param>
        /// <param name="endTime">Sluttidspunktet</param>
        /// <returns></returns>
        public static double GetElementXCoordinate(DateTime startTime, DateTime endTime)
        {
            double daysIn = (endTime - startTime).TotalDays;
            double cord = (daysIn * OneDayInPxWidth) + (daysIn * ElementVerticalPadding);
            return cord;
        }
        /// <summary>
        /// Metode der bestemmer <c>OneDayInPxWidth</c> ud fra en vindues-bredde og antallet af dage i et projekt.
        /// </summary>
        /// <param name="windowWidth">Størrelsen på vinduet, som Ganttcharten laves i forhold til.</param>
        /// <param name="projectLengthInDays">Atntallet af dage i projektet.</param>
        public static void SetOneDayPxSize(double windowWidth, int projectLengthInDays)
        {
            double temp = windowWidth / projectLengthInDays;
            if (temp > 25)
                OneDayInPxWidth = temp;
            else
                OneDayInPxWidth = 25;
        }
        /// <summary>
        /// Udformer selve labelen ud fra farve, bredde, højde og teksten der skal være.
        /// </summary>
        /// <param name="fillColor">Baggrundsfarve</param>
        /// <param name="width">Bredde</param>
        /// <param name="height">Højde</param>
        /// <param name="labelText">Label-tekst</param>
        /// <returns></returns>
        public static Label CreateLabel(Color fillColor, double width, double height, string labelText)
        {
            Label lbl = new Label();
            lbl.Height = height;
            lbl.Width = width;
            lbl.Background = new SolidColorBrush(fillColor);
            lbl.Content = labelText;
            return lbl;
        }
        #endregion
    }
}
